import java.util.HashMap;
import java.util.Map;

/*
    HashMap集合：
        1、HashMap集合底层是哈希表的数据结构
        2、哈希表是一个数组和单项链表的结合体，充分发挥他们各自的优点
        3、HashMap底层的源代码：
            public class HashMap{

                //HashMap底层实际上是一个一维数组
                Node<K, V>[] table;

                //静态的内部类HashMap.Node
                static class Node<K, V> implements Entry<K, V> {
                    final int hash;   //哈希值（哈希值是key的hashCode()方法的执行结果。hash值通过哈希算法，可以转换成数组的下标）
                    final K key;    //存储到Map集合的那个key
                    V value;       //存储到Map集合的那个value
                    HashMap.Node<K, V> next;   //下一个节点的内存地址
            }
            哈希表：一维数组，这个数组中每一个元素是一个单向链表
        4、HashMap集合的key部分特点：
            无序，不可重复
            无序是因为不一定挂到哪个单向链表上，不重复是equals方法来保证HashMap集合的key不重复，如果key重复了，value会覆盖
        5、哈希表需要散列分布均匀
        6、重点：放在HashMap集合key部分的元素，以及放在HashSet集合中的元素，需要同时重写hashCode和equals方法
        7、HashMap集合的默认初始容量是16，默认因子是0.75
            默认因子即当集合底层数组的容量达到75%的时候，数组开始扩容，扩容之后的容量是原容量的2倍
            重点：HashMap集合的初始容量必须是2的倍数，为了达到散列均匀

        8、*******************放在HashMap集合key部分的元素，以及放在HashSet集合中的元素，一定要同时重写hashCode和equals方法
        9、在JDK8之后，如果哈希表单向链表中的元素超过8个，单向链表这种数据结构会变成红黑树数据结构。当红黑树的节点数量小于6个
            时，会重新把红黑树变成单向链表数据结构
        10、HashMap集合中的key允许为Null。

 */
public class HashMapTest01 {
    public static void main(String[] args) {
        Map<Integer,String> map = new HashMap<>();
    }
}
